home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / db / esm-3.1 / esm-3 / usr / local / sm / src / serverlib / undo / undoCreateIndex.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-05  |  1.8 KB  |  75 lines

  1. /*
  2.  *   $RCSfile: undoCreateIndex.C,v $  
  3.  *   $Revision: 1.1.1.1 $  
  4.  *   $Date: 1996/05/04 21:56:03 $      
  5.  */ 
  6. #include "BTREEPAGE.h"
  7. #ifdef INIT_LRC_IS_LSN
  8. #    include "log_globals.h"
  9. #endif
  10. #include "undo_extfuncs.h"
  11.  
  12.  
  13. void undoCreateIndex(LOGRECORDHDR* recordHeader)
  14. {
  15. #ifdef INIT_LRC_IS_LSN
  16.     LRC            tempLRC;
  17.     LRC*        lrc = &tempLRC;
  18. #else
  19.     LRC*        lrc;
  20. #endif
  21.     TRANSREC    *transRec = (TRANSREC*) Active->transRec;
  22.     INIT_MISSING_UPDATE_INFO(transRec);
  23.     PID            *pid = &recordHeader->actionPid;
  24.     INDEXDESC    *desc = (INDEXDESC*) GET_LOG_IMAGE(recordHeader, 0);
  25.  
  26.     TRPRINT(TR_IO, TR_LEVEL_1, ("lsn:%d", recordHeader->recordLSN));
  27.     TRPRINT(TR_IO|TR_LOG, TR_LEVEL_2, ("pid:%d", pid->page));
  28.  
  29. #ifdef DEBUG
  30.     int length = (int) GET_LOG_IMAGE_SIZE(recordHeader, 0);
  31.     ASSERT3(length == ALIGNSIZE(sizeof(*desc)));
  32. #endif
  33.     
  34.     GROUPLINK    *groupLink = bf_ReadPage(UserBufGroup, pid, 
  35.                                         BTREE_PAGE2SIZE, BF_SEM);
  36.     if (!groupLink)  {
  37.         SM_ERROR(TYPE_FATAL, Active->errno);
  38.         }
  39.  
  40.     INDEXDESCPAGE* p = (INDEXDESCPAGE*) groupLink->bufFrame;
  41.  
  42.     BOOL actionDone = compareLRC( &recordHeader->actionLRC, &p->lrc) <= 0;
  43.  
  44. #ifndef INIT_LRC_IS_LSN
  45.     SM_ASSERT(LEVEL_3, missingUpdateInfo != NULL);
  46. #endif INIT_LRC_IS_LSN
  47.  
  48.     RECORD_MISSING_UPDATE(actionDone, &lrc, missingUpdateInfo, pid,
  49.                         & p->lrc, groupLink->pageHash, recordHeader,
  50.                         PAGE_INDEX);
  51.  
  52.     GENERATE_LRC(lrc);
  53.  
  54.     LSNOFFSET undoNextLSN = recordHeader->previousLSN;
  55.  
  56.     signalSemaphore( & groupLink->pageHash->semaphore);
  57.     
  58.     bf_UnfixPage(groupLink, BF_DEFAULT, FALSE);
  59.  
  60.     if (actionDone)  {
  61.         switch (desc->ndxType)  {
  62.             case SM_BTREENDX:
  63.                 if (bt_DestroyBtree(transRec->tid, desc->rootPid, 
  64.                                                             UserBufGroup)) {
  65.                     SM_ERROR(TYPE_FATAL, esmINTERNAL);
  66.                     }
  67.                 break;
  68.             default:
  69.                 SM_ERROR(TYPE_CRASH, esmINTERNAL);
  70.             }
  71.         }
  72.  
  73.     BT_LogPureCLR(undoNextLSN);
  74. }
  75.